// 1150. [字符串排序]版本升级II  https://oj.rnd.huawei.com/problems/1150/details
//某产品的版本号命名规则为若干段数字，多段数字之间用点(.)连接，如：1, 1.0, 1.2.03.04.56。
//现给定一个新版本，当已发布版本比新版本低时需要升级，请统计需要升级的版本数量。
//新版本和已发布版本比较规则：以点为分隔符将版本号拆分为多个段，从左到右分别比较多个段；
//相同段位置的数字越大，版本越高；若第一段数字相同，比较第二段，以此类推；
//如果比到最后两个版本的段数不一样，那么短的版本更小。
//版本 1.0, 1.0.0.0, 1.00.00 均可能出现，统计时视为不同版本。
//输入第一行一个整数，表示已发布版本号的个数，取值范围：[0,10]；
//第二行字符串表示已发布版本号，多个版本号以单空格分隔开，字符串长度范围：[0,50)；
//第三行是给定的新版本号。
//已发布版本列表中无重复版本号；
//版本号每段值的范围：[0,2^31)；
//输出一个整数，表示需要升级的版本数
//输入 7
// 100.200 20.500 100.5 100.05.0 0.0.0.0 100.50.1 100.50.0
// 100.50
//输出 4
//已发布版本逐个与新版本100.50比较：
//已发布版本 0.0.0.0、20.500
//的第一段值都小于新版本的第一段值100，因此这2个版本需要升级；
//已发布版本100.5、100.05.0 的第一段与新版本相同，第二段值为 5
//小于新版本的第二段值为50，因此这2个版本需要升级。
// 100.200的第二段大于新版本；100.50.1、100.50.0的前两段与新版本相同，但存在第三段，视为更大；因此这些版本都不需要升级。
//共有4个版本需要升级。
//输入 0
// 5.0.0
//输出 0
//已发布版本为空，所以需要升级的版本数为 0

#include <algorithm>
#include <iostream>
#include <queue>
#include <sstream>
#include <string>
#include <utility>
#include <vector>
using namespace std;
class Solution {
 public:
  // 待实现函数，在此函数中填入答题代码;
  vector<size_t> string_split(const string& str, char delim) {
    istringstream iss(str);
    string token;
    vector<size_t> res;
    char* end = nullptr;
    while (getline(iss, token, delim)) {
      size_t n = strtoul(token.c_str(), &end, 10);
      res.push_back(n);
    }
    for (auto it = res.end() - 1; res.size() <= 0 && it >= res.begin();) {
      if (*it == 0) {
        res.erase(it--);
      } else {
        break;
      }
    }
    return res;
  }
  int compareVer(const vector<size_t>& ver1, const vector<size_t>& ver2) {
    int ret = 0;
    for (int i = 0; i < ver1.size() && i < ver2.size(); i++) {
      if (ver1[i] > ver2[i]) {
        ret = 1;
        break;
      } else if (ver1[i] < ver2[i]) {
        ret = -1;
        break;
      }
    }
    if (ret == 0) {
      ret = ver1.size() - ver2.size();
    }
    return ret;
  }
  int VersionUpgrade(const vector<string>& oldVersions,
                     const string& newVersion) {
    int result = 0;
    vector<size_t> vtNewVer = string_split(newVersion, '.');
    for (size_t i = 0; i < oldVersions.size(); i++) {
      vector<size_t> ver = string_split(oldVersions[i], '.');
      int nCmp = compareVer(ver, vtNewVer);
      if (nCmp < 0) {
        result++;
      }
    }
    return result;
  }
};
inline int ReadInt() {
  int number;
  std::cin >> number;
  return number;
}
inline string ReadWord() {
  string word;
  cin >> word;
  return word;
}
template <typename T>
inline std::vector<T> ReadVector(int size) {
  std::vector<T> objects(size);
  for (int i = 0; i < size; ++i) {
    std::cin >> objects[i];
  }
  return objects;
}
inline string ReadLine() {
  string line;
  getline(cin, line);
  return line;
}
int main() {
  int oldVersionsNum = ReadInt();
  vector<string> oldVersions = ReadVector<string>(oldVersionsNum);
  string newVersion = ReadWord();
  Solution solu;
  int result = solu.VersionUpgrade(oldVersions, newVersion);
  cout << result << endl;
  return 0;
}